package com.example.model.response;

import com.example.enums.ErrorCode;

/**
 * 统一Service层返回数据对象构建类
 */
public class ServiceResultEntity {

    /**
     * 创建一个成功的返回结果（带描述）
     *
     * @param data        返回数据
     * @param description 信息描述
     * @return 服务层统一结果返回对象
     */
    public static <T> ServiceResult<T> newSuccessResult(T data, String description) {
        ServiceResult<T> serviceResult = new ServiceResult<>();
        return serviceResult
                .setErrorCode(ErrorCode.SUCCESS)
                .setData(data)
                .setDescription(description);
    }

    /**
     * 创建一个成功的返回结果（带描述、额外信息）
     *
     * @param data        数据
     * @param description 描述
     * @param extra       额外的
     * @return 服务层统一结果返回对象
     */
    public static <T> ServiceResult<T> newSuccessResult(T data, String description, Object extra) {
        ServiceResult<T> serviceResult = new ServiceResult<T>();
        return serviceResult
                .setErrorCode(ErrorCode.SUCCESS)
                .setData(data)
                .setDescription(description)
                .setExtra(extra);
    }

    /**
     * 创建一个失败的返回结果（带描述）
     *
     * @param errorCode   错误码
     * @param description 描述
     * @return 服务层统一结果返回对象
     */
    public static <T> ServiceResult<T> newFailResult(ErrorCode errorCode, String description) {
        ServiceResult<T> serviceResult = new ServiceResult<T>();
        return serviceResult
                .setErrorCode(errorCode)
                .setDescription(description);
    }

    /**
     * 创建一个失败的返回结果（带描述、数据）
     *
     * @param errorCode   错误码
     * @param description 描述
     * @param data        数据
     * @return 服务层统一结果返回对象
     */
    public static <T> ServiceResult<T> newFailResult(ErrorCode errorCode, T data, String description) {
        ServiceResult<T> serviceResult = new ServiceResult<T>();
        return serviceResult
                .setErrorCode(errorCode)
                .setData(data)
                .setDescription(description);
    }
}
